package ordersystem.config;

import com.zqu.ordersystem.interceptor.AuthInterceptor;
import com.zqu.ordersystem.interceptor.CountExecTimeInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration  // 标识当前类为一个Spring配置类
public class InterceptorConfig implements WebMvcConfigurer {

    /**
     * 重写addInterceptors方法，用于注册自定义拦截器
     * @param registry 拦截器注册器，用于管理拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册执行时间统计拦截器
        registry.addInterceptor(new CountExecTimeInterceptor())  // 添加CountExecTimeInterceptor拦截器
                .addPathPatterns("/**")  // 拦截所有路径
                .excludePathPatterns("/login");  // 排除/login路径，不进行拦截

        // 注册权限校验拦截器
        registry.addInterceptor(new AuthInterceptor())  // 添加AuthInterceptor拦截器
                .addPathPatterns("/**")  // 拦截所有路径
                .excludePathPatterns("/login", "/register");  // 排除/login和/register路径，不进行拦截

        // 拦截器的执行顺序按照注册顺序执行，先注册的先执行preHandle，后执行postHandle
    }
}


//@Configuration：标识当前类为一个Spring配置类，Spring会扫描到该类并加载其中的配置。
//WebMvcConfigurer：是一个接口，提供了对Spring MVC进行自定义配置的方法。在这里，我们实现了这个接口，以便自定义拦截器的配置。
//InterceptorRegistry：拦截器注册器，用于注册自定义拦截器并配置拦截规则。
//addInterceptor：向拦截器注册器中添加一个拦截器。
//addPathPatterns：指定拦截器拦截的路径模式。"/**"表示拦截所有路径。
//excludePathPatterns：指定拦截器不拦截的路径模式。例如，"/login"表示不拦截登录接口。